#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include< stdlib.h >
#include<string.h>
//int int_cmp(const void* p1, const void* p2)
//{
//	return ( *((int*)p1) - *((int*)p2));
//}

//int main()
//{
//	int arr[10] = { 2,4,6,1,7,8,9,3,0,5 };
//	int i = 0;
//	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), int_cmp);
//		for (i = 0; i < sizeof(arr) / sizeof(0); i++)
//		{
//			printf("%d", arr[i]);
//		}
//		return 0;
//}
struct S
{
	char name[20];
	int id;
};

int cmp_id(const void* p1, const void* p2)
{
	return ((struct S*)p1)->id - ((struct S*)p2)->id;
}
int cmp_name(const void* p1, const void* p2)
{
	return strcmp( ((struct S*)p1)->name, ((struct S*)p2)->name) ;
}
//
//int main()
//{
//	
//	struct S s[] = { {"li",1},{"wang",2} };
//	int i = 0;
//	qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), cmp_name);
//	for (i = 0; i < sizeof(s) / sizeof(s[0]); i++)
//	{
//		printf("%s\n", s[i].name);
//	}
//}
void swep(void* p1, void* p2, int size)
{
	int n = 0;
	for (n = 0; n < size; n++)
	{
		char tmp = *((char*)p1 + n);
		*((char*)p1 + n) = *((char*)p2 + n);
		*((char*)p2 + n) = tmp;

	}
}

void my_qsort(void* base, int count, int size, int(*p)(const void* p1, const void* p2))
{
	int i = 0;
	int j = 0;
	for (i = 0; i < count - 1; i++)
	{
		for (j = 0; j < count - 1 - i; j++)
		{
			if (p( (char*)base + j * size,  (char*)base + (j + 1) * size) > 0)
			{
				swep( (char*)base + j * size, (char*)base + (j + 1) * size ,size);
			}
		}
	}

}

int main()
{
	
	struct S s[] = { {"li",1},{"xang",2}, { "wiaoming",3 } };
	int i = 0;
	my_qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), cmp_id);
	for (i = 0; i < sizeof(s) / sizeof(s[0]); i++)
	{
		printf("%d\n", s[i].id);
	}
}